Skip to content

...很多个不同端口的server 问题: 发现的结果是:采用本地的“负载均衡”速度竟然提高了好多倍。这是为什么呢? 如果nginx基于进程和事件模型,多个server并没有增加进程或者是事件的处理能力,为什么能够提供性能呢?谢谢!

作者回复:我猜测你那个dll库的API方法是阻塞的,会导致大量的进程间切换,用多线程可以缓解。有两个办法验证:1、第5部分有一节课是介绍googleperftool的,你可以使用它生成一张调用耗时图。2、第5部分还有一节课介绍观察Nginx的进程间切换,例如pidstat,观察是不是有大量的主动进程切换。Nginx在繁忙的时候不应该有主动进程切换的。

选择哪种nginx版本

作者回复:

nginx.org上有mainline和stable版本,使用stable版本就好,从1.0以后偶数版本才是stable版本。 目前nginx最新版本是1.15.8,我估计你说的是openresty吧?openresty因为包含大量C模块以及lua模块,而其团队对openresty做过大量测试,更新Nginx版本较慢,所以不能一概而论,通常使用最新版本就好。

案例

老师

1、nginx启动后创建master进程和若干woker进程,当没有客户端请求时,nginx进程是处于休眠状态的;当客户端请求过来时,nginx进程是如何被唤醒的,如何真正被CPU执行的;

2、worker进程如何如何获取到锁:accept_mutex,是否通过master进程控制的,然后由master进程通知给worker进程

作者回复:

1、通过epoll_wait被唤醒。

2、与master无关,worker进程有几种锁,多数情况下,是通过共享内存实现的,即在共享内存中用原子操作实现,具体参见ngx_shmtx_trylock方法

案例

老师,我有个疑问,1. 我nginx后端的服务因为客户流量太大报了573,那么nginx报503还是573呢?因为开发配置的nginx,我没法去调试,只能先问问。2. nginx的返回码和后端的返回码是什么样的一个对应关系呢?3. 如果在nginx上做了限流,那么给客户返回的code是什么呢?谢谢老师

作者回复:1 2、通常会透传上游的HTTP响应码,仅在你想隐藏上游错误码时,才需要考虑替换;3、默认返回 503,你可以修改limit_req_status 指令改变这个错误码

ssl

案例:hsts

ssl第一次握手还是明文传输,也不安全,现在提了一个hsts,老师可以讲一下这个吗?

作者回复:ssl第一次握手是明文传输,但它只是传输安全套件以及公钥,之后数据是用新生成的对称密钥加密过的,所以SSL是安全的。hsts主要应用在浏览器端,它是强制浏览器使用https方式,对nginx来说,只需要在返回的http头部上添加Strict-Transport-Security,告诉浏览器这个站点只能通过https访问即可。

案例:https

老师,我想问一下,您这里将的TLS套件是采用对称加密算法,那 Https 中用的又是非对称加密.这两个我觉得有点混淆啊??不只带具体是怎么一回事呐??

作者回复:

1、https其实就是http+TLS。

2、传递数据用的是对称加密,但对称加密需要的密钥如何传输呢?

3、非对称加密是用来协商出“对称加密中的密钥”的。(目前主要是椭圆曲线)

案例:私钥不能用于加密,只能用于验证身份!

如果私钥加密之后,公钥都能解密的话,岂不是很不安全吗?比较持有公钥的人不止一个,容易泄露信息啊

作者回复:私钥不能用于加密,只能用于验证身份!(私钥用于数字签名,即身份验证)

作者回复:从算法上说,私钥加密的消息,只能用公钥才能解密。然而,公钥故名思议,是被公开的,所以任何人只要想获取公钥,就能获取到,所以从应用场景上说,私钥不用于加密,而主要用于身份识别。比如,Alice发出的消息,Bob用Alice公钥成功解密,就证明确实是Alice发出的。 《Web协议详解与抓包实战》第74-77课有较详细的说明。

签名不是加密吧

作者回复:不是,签名是为了证明某段消息是由谁发出的,这里可以用到加密算法,也会用到hash算法。

例如,网站为了证明身份,就会把自己的身份信息给到CA机构,CA机构会用自己的私钥加密身份信息,并结合网站的公钥打包成数字证书。这样用户拿到网站证书后使用CA的公钥解密便完成了验签。 我的《Web协议详解与抓包实战》课程第4部分约有6节课会讲这一过程涉及到的技术。

打开nginx 的DEBUG日志

openresty

openresty只是nginx上包了新的nginx模块。

第六部分会介绍openresty,第四部分在单机上搭环境验证时,会同时搭建openresty和nginx作为反向代理。

案例:openresty的一致性hash,不均匀,你怎么看

老师,openresty的一致性hash,不均匀,你怎么看,有没有办法修改算法或者虚拟节点的多少

作者回复:nginx的第三方模块代码都能修改,而openresty的lua代码改起来成本更小,例如你说的应该是chash.lua这个文件。 问题是,你打算用一套新的算法来改么?原来是openresty的consistent hash算法,与nginx官方的consistent hash算法,都是使用了memcached中的ketama实现思想的,是经过验证的。

nginx日志

  • nginx的日志文件名配置是支持变量的,配置时间变量即可实现日志的自动分隔
  • 不同的location或者server下,是可以记录到不同的文件中的。包括error_log和access_log。所以,针对不同的域名、url我们可以记录到不同的文件中。

image-20250102070800416

http->https

image-20241219214135632

性能最关心两个指标:并发和吞吐量

image-20241219213243757

nginx大并发

image-20241219212437366

image-20241219212508117

image-20241219212809585

nginx缺点

image-20241219212849514

nginx知识点

image-20241219211009220

公司也是一年前从haproxy切换到nginx

image-20241219210900040

apache 多线程+epoll模式

image-20241219210656521

nginx作用

image-20241219170542663

正向代理和反向代理

image-20241219142511015

老师微博

image-20241219124055433

用 OpenResty 和 Nginx 搭配使用

image-20241219123357590

请问如果location里面做了rewrite,access日志记录的是2个请求还是只记录rewrite之后的请求?

image-20241219122513406

nginx如何实现限流

image-20241219122356348

nginx的跨域解决方案

image-20241219122336906

关于$args,$arg_name 的问题

image-20241219122038653

用nginx+lua来做一个高并发的支持千万级甚至上亿级的网关系统

image-20241219121735084

nginx的access_log 和error_log

image-20241219121453902

前后端分离

image-20241219121329997

nginx源码

image-20241219121154157

image-20241219122633452

陶老师的《深入理解Nginx》一书

nginx.org,https:

版权:此文章版权归 One 所有,如有转载,请注明出处!

链接:可点击右上角分享此页面复制文章链接

上次更新时间:

最近更新